// 定义 Token 相关的类型
interface TokenInfo {
  token: string;
  expires?: number;
}

// Token 在 localStorage 中的键名
const TOKEN_KEY = "admin_token";
const USER_INFO_KEY = "admin_user_info";

/**
 * 获取 token
 */
export const getToken = (): string | null => {
  if (typeof window === "undefined") return null;

  try {
    const tokenInfo = localStorage.getItem(TOKEN_KEY);
    if (!tokenInfo) return null;

    const parsedToken: TokenInfo = JSON.parse(tokenInfo);

    // 如果设置了过期时间，检查是否过期
    if (parsedToken.expires && parsedToken.expires < Date.now()) {
      removeToken();
      return null;
    }

    return parsedToken.token;
  } catch (error) {
    console.error("Error parsing token:", error);
    return null;
  }
};

/**
 * 设置 token
 * @param token - token字符串
 * @param expires - 过期时间（可选，毫秒时间戳）
 */
export const setToken = (token: string, expires?: number): void => {
  if (typeof window === "undefined") return;

  const tokenInfo: TokenInfo = {
    token,
    expires,
  };

  localStorage.setItem(TOKEN_KEY, JSON.stringify(tokenInfo));
};

/**
 * 移除 token
 */
export const removeToken = (): void => {
  if (typeof window === "undefined") return;
  localStorage.removeItem(TOKEN_KEY);
};

/**
 * 检查是否已登录
 */
export const isAuthenticated = (): boolean => {
  return !!getToken();
};

// 用户信息相关类型
interface UserInfo {
  id: number;
  username: string;
  role: string;
  // ... 其他用户信息字段
}

/**
 * 获取用户信息
 */
export const getUserInfo = (): UserInfo | null => {
  if (typeof window === "undefined") return null;

  try {
    const userInfo = localStorage.getItem(USER_INFO_KEY);
    return userInfo ? JSON.parse(userInfo) : null;
  } catch (error) {
    console.error("Error parsing user info:", error);
    return null;
  }
};

/**
 * 设置用户信息
 */
export const setUserInfo = (userInfo: UserInfo): void => {
  if (typeof window === "undefined") return;
  localStorage.setItem(USER_INFO_KEY, JSON.stringify(userInfo));
};

/**
 * 移除用户信息
 */
export const removeUserInfo = (): void => {
  if (typeof window === "undefined") return;
  localStorage.removeItem(USER_INFO_KEY);
};

/**
 * 完全登出（清除所有认证相关信息）
 */
export const logout = (): void => {
  removeToken();
  removeUserInfo();
};
